var hero = {
    name:"hero",
    size:100,
    lo_x:100,
    lo_y:100,
    sp_x:50,
    sp_y:50,
    color:'yellow',
    angle:0,        //旋转角度
    radian:0,        //边框弧度
    radianFlag:true,   //边框正负凭证
}
var kj = document.getElementById('kj');     //大画布元素
var rfTime = new Date().getTime();          //参考毫秒时间
var npcList = new Array();                           //npc集合
var npcNameArr = "世舜丞主产仁仇仓仕仞任伋众伸佐佺侃侪促俟信俣修倝倡倧偿储僖僧僳儒俊伟列则刚创前剑助劭势勘参叔吏嗣士壮孺守宽宾宋宗宙宣实宰尊峙峻崇崈川 州巡帅庚战才承拯操斋昌 晁暠曹曾珺玮珹琒琛琩琮 琸瑎玚璟璥瑜生畴矗矢石 磊砂碫示社祖祚祥禅稹穆 竣竦综缜绪舱舷船蚩襦轼 辑轩子杰榜碧葆莱蒲天乐 东钢";                        //npc姓名
// addNpc(3);
//npcHtml字符串                     -
function grap(npc){
    let str = "<div id='"+npc.name+"' class='npc'><div id='"+npc.name+"N' class='npcName'></div></div>"
    return str;
}
//为npc属性赋值方法                 -
function giveNpcPro(npc){
    let npcEl = document.getElementById(npc.name);
    let npcNameEl = document.getElementById(npc.name+'N');

    //大小
    npcEl.style.width = npc.size + 'px';
    npcEl.style.height = npc.size + 'px';
    npcEl.style.lineHeight = npc.size + 'px';
    //位置
    npcEl.style.left = npc.lo_x + 'px';
    npcEl.style.top = npc.lo_y + 'px';
    //颜色
    npcEl.style.backgroundColor = npc.color;
    //名字
    npcNameEl.innerText = npc.name;
    //旋转角度
    npcEl.style.transform = 'rotate('+npc.angle+'deg)';
    npcNameEl.style.transform = 'rotate('+(0-npc.angle)+'deg)';
    //边框弧度
    npcEl.style.borderRadius = npc.radian + 'px';
}
function giveNpcPro2(){
    //npc
    for(let i = 0;i < npcList.length;i++){
        giveNpcPro(npcList[i]);
    }
    //hero
    giveNpcPro(hero);
}
//添加npc方法
function addNpc(num){
    for(let i=0;i<num;i++){
        //名字
        let namet = generateName();
        while(isNpc(namet)){
            namet = generateName();
            alert('11')
        }
        //大小
        let sizet = parseInt(Math.random()*hero.size/4*3)+parseInt(hero.size/2);
        // let sizet = parseInt(Math.random()*30+10);
        //位置
        let lo_xt;
        let lo_yt;
        while(true){
            lo_xt = parseInt(Math.random()*window.innerWidth)-50;
            lo_yt = parseInt(Math.random()*window.innerHeight)-50;
            let flog_temp = isCrash({
                name:namet,
                size:sizet,
                lo_x:lo_xt,
                lo_y:lo_yt,
            })
            let flog_temp2 = isCrashHero({
                name:namet,
                size:sizet,
                lo_x:lo_xt,
                lo_y:lo_yt,
            })
            if(flog_temp == 'noc' && flog_temp2 == 'noc')break;
        }
        let colort = generateColor();
        npcList.push({
            name:namet,
            size:sizet,
            lo_x:lo_xt,
            lo_y:lo_yt,
            sp_x:3,
            sp_y:3,
            color:colort,
            angle:0,        //旋转角度
            radian:0,        //边框弧度
            radianFlag:true,   //边框正负凭证
            flag_x:true,        //x轴移动凭证
            flag_y:true         //y轴移动凭证
        })
        // console.log(npcList);
    }
}
//将npc集合与主角写入网页
function NpcToHtml(){
    let texts = '';
    for(let i = 0;i < npcList.length;i++){
        //产生文本
        texts += grap(npcList[i]);
    }
    //将主角写入网页
    texts += grap(hero);
    kj.innerHTML = texts;
}
//检查npc是否存在
function isNpc(name){
    for(let i = 0;i < npcList.length;i++){
        if(npcList[i].name == name)return true;
    }
    return false;
}
//随机生成npc名字
function generateName(){
    let name = npcNameArr[parseInt(Math.random()*npcNameArr.length)];
    name += npcNameArr[parseInt(Math.random()*npcNameArr.length)];
    name += npcNameArr[parseInt(Math.random()*npcNameArr.length)];
    return name;
}
//随机生成npc颜色
function generateColor(){
    let color1 = parseInt(Math.random()*256);
    let color2 = parseInt(Math.random()*256);
    let color3 = parseInt(Math.random()*256);
    let colors = "rgb("+color1+","+color2+","+color3+")";
    return colors;
}
//自动添加npc  
function autoAddNpc(){
    //数量过少时
    if(npcList.length < 3){
        addNpc(parseInt(Math.random()*5))
    }
    //间隔八秒时
    let rfTimes = new Date().getTime();
    if((rfTimes - rfTime) > 10000){
        rfTime = rfTimes;   //更新参考时间
        if(npcList.length<20)addNpc(parseInt(Math.random()*6));
    }
}

//屏幕刷新器
setInterval(()=>{
    //碰撞检测
    Crash();
    //添加npc
    autoAddNpc();
    //更新数据
    animate()
    //写入网页
    NpcToHtml();
    //赋css属性
    giveNpcPro2();

},24)

//碰撞检测
function Crash(){
    for(let i = 0;i < npcList.length;i++){
        let flog = isCrash(npcList[i])
        if(flog != 'noc'){
            if(flog == 'hero'){
                alert('游戏失败，您被吃了');
                hero.size = 100;
                npcList = [];
                location.reload();
            }
            deleteNpc(flog);
        }
    }
    let flog = isCrash(hero)
    if(flog != 'noc'){
        if(flog == 'hero'){
            alert('游戏失败，您被吃了')
            hero.size = 100;
            npcList = [];
            location.reload();
        }
        deleteNpc(flog);
    }
    
}
//碰撞检测2     返回size较小的npcName，如无碰撞，返回noc 注：跳过自身比较   --
function isCrash(npc){
    for(let i = 0;i < npcList.length;i++){
        let npct = npcList[i];
        if(npc.name == npct.name)continue;
        //x轴
        if((npc.lo_x+npc.size) > npct.lo_x && npc.lo_x < (npct.lo_x + npct.size)){
            //y轴
            if((npc.lo_y+npc.size) > npct.lo_y && npc.lo_y < (npct.lo_y +npct.size)){
                //矩形撞击
                console.log("撞击事件\n"+npc.name+npc.size+"\n"+npct.name+npct.size);
                console.log(npcList);
                if(npct.size > npc.size){
                    setSize((npct.size+parseInt(npc.size/5)),npct.name);
                    return npc.name;
                }else{  //同样大小随缘吃
                    setSize((npc.size+parseInt(npct.size/5)),npc.name);
                    return npct.name;
                }
            }
        }
    }
    return 'noc';
}
//碰撞检测主角
function isCrashHero(npc){
    //x轴
    if((npc.lo_x+npc.size) > hero.lo_x && npc.lo_x < (hero.lo_x + hero.size)){
        //y轴
        if((npc.lo_y+npc.size) > hero.lo_y && npc.lo_y < (hero.lo_y +hero.size)){
            //矩形撞击
            console.log("撞击事件\n"+npc.name+npc.size+"\n"+hero.name+hero.size);
            console.log(npcList);
            if(hero.size > npc.size){
                setSize((hero.size+parseInt(npc.size/8)),hero.name);
                return npc.name;
            }else{  //同样大小随缘吃
                setSize((npc.size+parseInt(hero.size/8)),npc.name);
                return hero.name;
            }
        }
    }
    return 'noc';
}
//修改大小方法
function setSize(sizet,name){
    if(hero.name == name){
        console.log("主角大小"+hero.size+"=>"+sizet);
        hero.size = sizet;
        if(hero.size > window.innerWidth){
            alert("游戏胜利！！！\n您已经大的溢出屏幕了")
            hero.size = 100;
            npcList = []
            location.reload();
        }
        return;
    }
    for(let i = 0;i < npcList.length;i++){
        if(npcList[i].name = name){
            npcList[i].size = sizet;
            break;
        }
    }
}
//删除npc方法       --不删除hero
function deleteNpc(NpcName){
    for(let i = 0;i < npcList.length;i++){
        let npct = npcList[i];
        if(npct.name == NpcName){
            npcList.splice(i,1);
            break;
        }
    }
}

//更新数据方法
function animate(){
    //转动
    for(let i = 0;i < npcList.length;i++){
        let npct = npcList[i];
        for(let i = 0;i < 5;i++){
            npct.angle++;
        }
        if(npct.angle > 360)npct.angle = npct.angle%360;
    }
    for(let i = 0;i < 5;i++){
        hero.angle++;
    }
    if(hero.angle > 360)hero.angle = hero.angle%360;
    //圆角
    for(let i = 0;i < npcList.length;i++){
        let npct = npcList[i];
        for(let i = 0;i < 5;i++){
            if(npct.radianFlag){
                npct.radian++;
            }else{
                npct.radian--;
            }
        }
        if(npct.size <= npct.radian)npct.radianFlag = false;
        if(0 >= npct.radian)npct.radianFlag = true;
    }
    for(let i = 0;i < 5;i++){
        if(hero.radianFlag){
            hero.radian++;
        }else{
            hero.radian--;
        }
    }
    if(hero.size <= hero.radian)hero.radianFlag = false;
    if(0 >= hero.radian)hero.radianFlag = true;

    //npc移动   第一版
    // for(let i = 0;i < npcList.length;i++){
    //     let npct = npcList[i];
    //     if(npct.lo_x > window.innerWidth - npct.size)npct.sp_x = (0-npct.sp_x);
    //     if(npct.lo_y > window.innerHeight - npct.size)npct.sp_y = (0-npct.sp_y);
    //     if(npct.lo_x < 0)npct.sp_x = (0-npct.sp_x);
    //     if(npct.lo_y < 0)npct.sp_y = (0-npct.sp_y);
    //     npct.lo_x += npct.sp_x;
    //     npct.lo_y += npct.sp_y;
    // }

    //npc移动   第二版
    for(let i = 0;i < npcList.length;i++){
        let npct = npcList[i];
        if(npct.lo_x > window.innerWidth - npct.size)npct.flag_x = false;
        if(npct.lo_y > window.innerHeight - npct.size)npct.flag_y = false;
        if(npct.lo_x < 0)npct.flag_x = true;
        if(npct.lo_y < 0)npct.flag_y = true;
        if(npct.flag_x)npct.lo_x += npct.sp_x;else npct.lo_x -= npct.sp_x;
        if(npct.flag_y)npct.lo_y += npct.sp_y;else npct.lo_y -= npct.sp_y;
    }


    //主角移动 --弃用 --启用
    if(K_up && hero.lo_y < (window.innerHeight-hero.size)){
        hero.lo_y++;
        hero.lo_y++;
        hero.lo_y++;
        if(K_space){hero.lo_y++;hero.lo_y++;hero.lo_y++;hero.lo_y++;hero.lo_y++;}
    }
    if(K_down && hero.lo_y > 0){
        hero.lo_y--;
        hero.lo_y--;
        hero.lo_y--;
        if(K_space){hero.lo_y--;hero.lo_y--;hero.lo_y--;hero.lo_y--;hero.lo_y--;}
    }
    if(K_left && hero.lo_x > 0){
        hero.lo_x--;
        hero.lo_x--;
        hero.lo_x--;
        if(K_space){hero.lo_x--;hero.lo_x--;hero.lo_x--;hero.lo_x--;hero.lo_x--;}
    }
    if(K_right && hero.lo_x < (window.innerWidth-hero.size)){
        hero.lo_x++;
        hero.lo_x++;
        hero.lo_x++;
        if(K_space){hero.lo_x++;hero.lo_x++;hero.lo_x++;hero.lo_x++;hero.lo_x++;}
    }

}

//主角移动基础版本
// document.onkeydown = function(e){
//     if(e.keyCode == 38 || e.keyCode == 87 && hero.lo_y > 0){
//         hero.lo_y--;hero.lo_y--;hero.lo_y--;hero.lo_y--;hero.lo_y--;hero.lo_y--;
//     }
//     if(e.keyCode == 40 || e.keyCode == 83 && hero.lo_y < (window.innerHeight-hero.size)){
//         hero.lo_y++;hero.lo_y++;hero.lo_y++;hero.lo_y++;hero.lo_y++;hero.lo_y++;
//     }
//     if(e.keyCode == 37 || e.keyCode == 65 && hero.lo_x > 0){
//         hero.lo_x--;hero.lo_x--;hero.lo_x--;hero.lo_x--;hero.lo_x--;hero.lo_x--;
//     }
//     if(e.keyCode == 39 || e.keyCode == 68 && hero.lo_x < (window.innerWidth-hero.size)){
//         hero.lo_x++;hero.lo_x++;hero.lo_x++;hero.lo_x++;hero.lo_x++;hero.lo_x++;
//     }
// }

